/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package clases_test;

import clases.Bebida;
import clases.Ingrediente;
import clases.Nacionalidad;
import clases.Producto;
import clases.Receta;
import clases.Tipo;

//import java.io.BufferedReader;
//import java.io.File;
//import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
//import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.FlushModeType;
import javax.persistence.Persistence;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;

/**
 *
 * @author juanjito
 */
public class testBuscaIngrediente {
    
        
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("recetasUnit");
    EntityManager em;
    
    Tipo ti1;
    Tipo ti2;
    Tipo ti3;
    
    Bebida be1;
    Bebida be2;
    Bebida be3;
    
    Nacionalidad na1;
    Nacionalidad na2;
    Nacionalidad na3;
    
    Producto pr1;
    Producto pr2;
    Producto pr3;
    Producto pr4;
    
    Ingrediente in1;
    Ingrediente in2;
    Ingrediente in3;
    Ingrediente in4;
    
    Receta re1;
    Receta re2;
    Receta re3;
    
    public testBuscaIngrediente(){}
    
    @BeforeClass
    public static void setUpClass() throws Exception {
    }

    @AfterClass
    public static void tearDownClass() throws Exception {
    }

    @Before
    public void setUp() {
        em = emf.createEntityManager();
        em.setFlushMode(FlushModeType.AUTO);
     
        
    }

    @After
    public void tearDown() {
        em.close();
    }
    
    private Tipo createTipo(String n){
        Tipo ti = new Tipo();
        ti.setNombre(n);
        return ti;
    }
    
    private Nacionalidad createNacionalidad(String n){
        Nacionalidad na = new Nacionalidad();
        na.setNombre(n);
        return na;
    }
    
    private Bebida createBebida(String n, Nacionalidad na)
    {
        Bebida b = new Bebida();
        b.setNombre(n);
        b.setNacionalidad(na);
        return b;
    }
    
    private Producto createProducto(String n){
        Producto p = new Producto();
        p.setNombre(n);
        return p;
    }
    
    private Ingrediente createIngrediente(Producto p, double c, String u)
    {
        Ingrediente i = new Ingrediente();
        i.setProducto(p);
        i.setCantidad(c);
        i.setUnidad(u);
        return i;
    }
    
    private Receta createReceta(String re, String n, String d,Tipo t, Nacionalidad na,
            Collection<Ingrediente> co, Bebida b,int du,double k){
        Receta r = new Receta();
        r.setRef(re);
        r.setNombre(n);
        r.setDificultad(d);
        r.setIngredientes(co);
        r.setTipo(t);
        r.setVino(b);
        r.setNacionalidad(na);
        r.setDuracion(du);
        r.setKcal(k);
        return r;
    }
    
    
    
    //imprime una receta por pantalla, en modo texto
    @Test
    @SuppressWarnings("empty-statement")
    public void buscarIngredientes() throws FileNotFoundException, IOException
    {   
        Producto p1= new Producto();
        p1.setNombre("Espinacas");
        int i = 0;
        String linea = new String();
        List<Receta> recetas = new ArrayList();
        ArrayList<Ingrediente> ings = new ArrayList();
        //Aqui sacamos toda la lista de resultados
        recetas =em.createQuery("SELECT r FROM Receta r WHERE r.id>0").getResultList();
        
       //Lista donde vamos a introducir todas las recetas con el producto indicado
        List<Receta> rec_pro = new ArrayList();
        //Recorremos todas las recetas
        for(int j=0;j<recetas.size();j++) {
       //Recorremos los ingredientes y compramos el producto con el buscado (p1)
       //que es Sal, e introduciomos en una nueva lista las recetas que la tengan     
            Iterator<Ingrediente> it = recetas.get(j).getIngredientes().iterator();
            while(it.hasNext())
            {
		Ingrediente in = it.next();
		if(in.getProducto().compareTo(p1)==0)
                    rec_pro.add(recetas.get(j));
            }   
       //Recorremos la nueva lista y la mostramos por pantalla
            for(int x=0;x<rec_pro.size();x++) {
            
        
            System.out.println("Nombre de la receta: "+rec_pro.get(x).getNombre());
            System.out.println("Nacionalidad: "+rec_pro.get(x).getNacionalidad().getNombre());
            System.out.println("Tipo de comida: "+rec_pro.get(x).getTipo().getNombre());
            System.out.println("Dificultad: "+rec_pro.get(x).getDificultad());
            System.out.println("Bebida que lo acompaña: "+rec_pro.get(x).getVino().getNombre());
            System.out.println("Kilocalorias: "+recetas.get(j).getKcal());
            System.out.println("Lista de ingredientes: ");
            
            int y=0;
            
            while(y< rec_pro.get(x).getIngredientes().size()-1){
                
                System.out.println("Ingrediente: " + rec_pro.get(x).getIngredientes().toString());
                y++;
                }

         }
         }    
    }

}
